package com.itheima.sc.service.ums;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.itheima.sc.api.ums.UmsMenuApi;
import com.itheima.sc.pojo.ums.UmsMenu;
import com.itheima.sc.vo.PageResult;
import com.itheima.sc.vo.UmsMenuVo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
public class UmsMenuService {
    @DubboReference
    private UmsMenuApi umsMenuApi;

    /**
     * 添加后台菜单
     */
    public void create(UmsMenu umsMenu) {
        //封装数据
        umsMenu.setCreateTime(new Date());
        if (umsMenu.getParentId() == 0) {
            umsMenu.setLevel(0);
        } else {
            umsMenu.setLevel(1);
        }
        //调用API添加后台菜单
        umsMenuApi.create(umsMenu);
    }

    /**
     * 根据ID删除后台菜单
     */
    public void delete(Integer id) {
        //调用API删除后台菜单
        umsMenuApi.delete(id);
    }

    /**
     * 分页查询后台菜单
     */
    public PageResult list(Integer pageNum, Integer pageSize, Integer parentId) {
        //调用API进行分页查询,并返回数据
        return umsMenuApi.selectPage(pageNum, pageSize, parentId);
    }

    /**
     * 树形结构返回所有菜单列表
     */
    public List<UmsMenuVo> treeList() {
        //查询所有父id为0的数据行
        List<UmsMenu> _parentList = umsMenuApi.getParentId();

        //创建一个新的UmsMenu集合
        List<UmsMenuVo> parentList = new ArrayList<>();

        //遍历_parentList
        for (UmsMenu umsMenu : _parentList) {
            UmsMenuVo umsMenuVo = new UmsMenuVo();
            BeanUtil.copyProperties(umsMenu,umsMenuVo);
            parentList.add(umsMenuVo);
        }

        //遍历parentList,获取每个父id的子id集合
        for (UmsMenuVo umsMenuVo : parentList) {
            //根据父id查询子id集合
            List<UmsMenu> vos = umsMenuApi.getChildren(umsMenuVo.getId());
            List<UmsMenuVo> childrenList = new ArrayList<>();
            //将每个子集合封装进父集合中
            for (UmsMenu vo : vos) {
                UmsMenuVo umsMenuVo1 = new UmsMenuVo();
                BeanUtil.copyProperties(vo,umsMenuVo1);
                childrenList.add(umsMenuVo1);
            }
            umsMenuVo.setChildren(childrenList);
        }
        return parentList;
    }

    /**
     * 修改后台菜单
     */
    public void update(UmsMenu umsMenu) {
        //调用API实现修改菜单
         umsMenuApi.update(umsMenu);
    }

    /**
     * 查询菜单的所有数据
     *
     * @return
     */
    public List<UmsMenu> getAll() {
        return umsMenuApi.getAll();
    }

    /**
     * 根据ID获取菜单详情
     */
    public UmsMenu getMenuInfo(Integer id) {
        //根据ID获取菜单详情
        return umsMenuApi.getMenuInfo(id);
    }

    /**
     * 修改菜单显示状态
     */
    public void updateHidden(Integer id,Integer hidden) {
        //调用API修改菜单显示状态
        umsMenuApi.updateHidden(id,hidden);
    }
}
